/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.clicarros.fachada.implementacao;

import br.com.clicarros.dao.Implementacao.cliente.DAOCliente;
import br.com.clicarros.dao.Implementacao.IDAO;
import br.com.clicarros.dao.Implementacao.anuncio.DAOAnuncio;
import br.com.clicarros.dao.Implementacao.anuncio.DAOImagem;
import br.com.clicarros.dao.Implementacao.navegacao.DAONavegacao;
import br.com.clicarros.dao.Implementacao.perfilusuario.DAOPerfilUsuario;
import br.com.clicarros.dao.Implementacao.solicitacaoveiculo.DAOSolicitacaoVeiculo;
import br.com.clicarros.dao.Implementacao.usuario.DAOUsuario;
import br.com.clicarros.dao.Implementacao.veiculo.DAOCategoria;
import br.com.clicarros.dao.Implementacao.veiculo.DAOMarca;
import br.com.clicarros.dao.Implementacao.veiculo.DAOVeiculo;
import br.com.clicarros.dominio.anuncio.Anuncio;
import br.com.clicarros.dominio.anuncio.Imagem;
import br.com.clicarros.dominio.cliente.Cliente;
import br.com.clicarros.dominio.navegacao.Navegacao;
import br.com.clicarros.dominio.perfilusuario.PerfilUsuario;
import br.com.clicarros.dominio.solicitacaoveiculo.SolicitacaoVeiculo;
import br.com.clicarros.dominio.usuario.Usuario;
import br.com.clicarros.dominio.veiculo.Categoria;
import br.com.clicarros.dominio.veiculo.Marca;
import br.com.clicarros.dominio.veiculo.Veiculo;
import br.com.clicarros.fachada.IFachada;
import br.com.clicarros.processos.GerenciadorProcesso;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



/**
 *
 * @author Bruno
 */
public class Fachada implements IFachada{
    
   protected Map<String, IDAO> daos = new HashMap<String, IDAO>();
   /**
    * método construtor que adiciona todas as DAO dentro do map. 
    * @return void
    * @param void 
    */
   public Fachada(){
       
       daos.put(Cliente.class.getName(), new DAOCliente());
       daos.put(Veiculo.class.getName(), new DAOVeiculo());
       daos.put(Anuncio.class.getName(), new DAOAnuncio());
       daos.put(SolicitacaoVeiculo.class.getName(), new DAOSolicitacaoVeiculo());
       daos.put(Marca.class.getName(), new DAOMarca());
       daos.put(Categoria.class.getName(), new DAOCategoria());
       daos.put(Imagem.class.getName(), new DAOImagem());
       daos.put(Usuario.class.getName(), new DAOUsuario());
       daos.put(Navegacao.class.getName(), new DAONavegacao());
       daos.put(PerfilUsuario.class.getName(), new DAOPerfilUsuario());
       
  
       
       
   }

    @Override
    public void inserir(Object o) {
        //recuper o objeto da DAO (do map) referente ao objeto recebido por parametro.
        IDAO dao = daos.get(o.getClass().getName());
        
        try{
            
        dao.inserir(o);
        
        }catch (ClassNotFoundException e){
            
            
        }catch (SQLException e){
            
            
        }catch (Exception e){
            
        }
        
        
    }

    @Override
    public void excluir(Object o) {
       
        //recuper o objeto da DAO (do map) referente ao objeto recebido por parametro.
        IDAO dao = daos.get(o.getClass().getName());
        
        try{
            
        dao.excluir(o);
        
        }catch (ClassNotFoundException e){
            
            
        }catch (SQLException e){
            
            
        }catch (Exception e){
           
        }
        
    }

    @Override
    public void alterar(Object o) {
       //recuper o objeto da DAO (do map) referente ao objeto recebido por parametro.
        IDAO dao = daos.get(o.getClass().getName());
        
        try{
            
        dao.alterar(o);
        
        }catch (ClassNotFoundException e){
            
          e.printStackTrace();  
        }catch (SQLException e){
            
           e.printStackTrace();  
        }catch (Exception e){
           e.printStackTrace();  
        }
    }

    @Override
    public List listarTodos(Object o) {
        
        //recuper o objeto da DAO (do map) referente ao objeto recebido por parametro.
        IDAO dao = daos.get(o.getClass().getName());
        List<Object> retorno = null;
        try{
            
        retorno = dao.listarTodos(o);
        
        }catch (ClassNotFoundException e){
            e.printStackTrace(); 
            
        }catch (SQLException e){
            
            e.printStackTrace(); 
        }catch (Exception e){
           e.printStackTrace();  
        }
        
        return retorno;
    }

    @Override
    public List consultar(Object o) {
       //recupera o objeto da DAO (do map) referente ao objeto recebido por parametro.
        IDAO dao = daos.get(o.getClass().getName());
        List<Object> retorno = null;
        try{
            
        retorno = dao.consultar(o);
        
        }catch (ClassNotFoundException e){
            
            e.printStackTrace(); 
        }catch (SQLException e){
            e.printStackTrace(); 
            
        }catch (Exception e){
            e.printStackTrace(); 
        }
        
       return retorno;
        
    }

    @Override
    public Object consultarId(Object o) {
        //recupera o objeto da DAO(do map) referente ao objeto recebido por parâmetro.
        IDAO dao = daos.get(o.getClass().getName());
        
        Object retorno = null;
        
        try{
            
            retorno = dao.consultarId(o);
            
        }catch (ClassNotFoundException e){
            e.printStackTrace(); 
            
        }catch (SQLException e){
           e.printStackTrace();  
            
        }catch (Exception e){
           e.printStackTrace();  
        }
        
       return retorno;
        
    }
    
}
